{{addToMap . "ContentTitle" "使用帮助"}}

<div class="content">
<div class="box">
  <div class="box-body">
    <h3>介绍</h3>
    <p>报警系统主要解决一个问题，<b>系统出现问题后如何通知相关责任人？</b>本系统将报警和报警信息的发送进行了分离，业务系统只负责报警，报警系统会根据业务系统项目的关注人进行消息分发，而且可以实时调整项目关注人，信息分发更加灵活。</p>
    <br />
    <h3>监控点报警触发地址</h3>
    <blockquote>
        <p>
        http://{{.Host}}/api/trigger
        </p>
    </blockquote>
    <br />
    <h3>项目</h3>
      <p>
      项目下可以有多个监控点，用户可以创建自己的项目，也可以把其他用户加入自己项目的关注列表中，当项目下的某个监控点发生报警的时候，就会通知到所有的关注用户。（当然必须是登录了App）
      </p>
      <p>每个项目有自己的APIKEY与SECUREKEY，用于触发报警时进行签名运算，保证自己的项目不会被无关人员随意触发报警造成困扰。</p>

      <p>
    <br />
    <h3>监控点</h3>
    <p>
        每个监控点对应一个具体的报警项，并有唯一的英文标识。例如（<b>mysql_lost</b>)，可以增加中文名称进行标注记忆。
    </p>
    <p>
        监控点分两类，<b>直接触发</b>与<b>定时监控</b>。
        <br />
        <b>直接触发</b>好理解，直接发送信息到触发地址就可以了。直接触发不会每次都会触发报警，以避免业务系统频繁报错导致报警不断。
        <br />
        <b>定时监控</b>主要是做定时任务的监控，例如每天凌晨1点需要执行一个任务，大概2点完成，我们很希望能在3点看看是否真的执行了。我们可以新建一个定时监控类型的监控点，并填写定时检查规则（符合crontab格式)，系统自动就会根据指定的规则取检查监控点，如果在上一次检查时间点与本次检查时间点内有信息触发，系统就会认为监控点正常，否则会认为监控点没有被正确的触发响应，发出报警。
    </p>

    <br />
    <h3>触发监控点</h3>
    请求参数：<br />
    <table class="table table-bordered">
        <tbody><tr>
          <th style="width: 100px">参数名</th>
          <th>说明</th>
        </tr>
        <tr>
          <td>tkey</td>
          <td>要触发的监控点的英文标识</td>
        </tr>
        <tr>
          <td>data</td>
          <td>触发的报警内容，定时监控触发将忽略该参数</td>
        </tr>
        <tr>
          <td>t</td>
          <td>当前时间戳，注意服务器之间时间不要差距过大</td>
        </tr>
        <tr>
          <td>k</td>
          <td>监控点所在项目的apikey</td>
        </tr>
        <tr>
          <td>s</td>
          <td>以上参数按一定规则md5签名后的签名值</td>
        </tr>
      </tbody></table>

      <br />
      <h3>签名算法</h3>
      <ol>
          <li>将POST参数（除's'参数以外的）按参数名正序排序。例如：a,d,c 排序为 a,c,d</li>
          <li>将所有参数和值按顺序直接合并为字符串。{"a","zifuchuan","b","zifuchuan"}就变为"azhifuchuanbzifuchuan"</li>
          <li>将上面字符串末尾加上SECUREKEY</li>
          <li>进行md5签名计算</li>
      </ol>

      <b>Python代码示例:</b>
      <pre>
      <code>
def md5_sign(params, secure_key):
    str_for_sign = ""
    k_list = []
    for k in params:
        k_list.append(k)
    k_list.sort()

    for k in k_list:
        str_for_sign = str_for_sign + k + params[k]

    str_for_sign = str_for_sign + secure_key
    print str_for_sign
    m = md5.new()
    m.update(str_for_sign)
    return m.hexdigest()
      </code>
      </pre>

  </div>
</div>
</div>